﻿#ifndef __SS_SWAP_H__
#define __SS_SWAP_H__
#include "../ssBaseDefine.h"

namespace StarSeeker
{
	//交换
	template <class T>
	inline void Swap(T &t1, T &t2)
	{
		if (&t1 == &t2) return;
		T t3 = t1;
		t1 = t2;
		t2 = t3;
	}
	//交换整型
	template <class T>
	inline void SwapInt(T &t1, T &t2)
	{
		if (t1 == t2) return;
		t1 ^= t2;
		t2 ^= t1;
		t1 ^= t2;
	}

	//字节序转换
	inline i32 ConvertEndian(i32 a)
	{
		char *pstr = reinterpret_cast<char*>(&a);
		SwapInt(pstr[0], pstr[3]);
		SwapInt(pstr[1], pstr[2]);
		return a;
	}
	inline u32 ConvertEndian(u32 a)
	{
		char *pstr = reinterpret_cast<char*>(&a);
		SwapInt(pstr[0], pstr[3]);
		SwapInt(pstr[1], pstr[2]);
		return a;
	}
	inline i16 ConvertEndian(i16 a)
	{
		char *pstr = reinterpret_cast<char*>(&a);
		SwapInt(pstr[0], pstr[1]);
		return a;
	}
	inline u16 ConvertEndian(u16 a)
	{
		char *pstr = reinterpret_cast<char*>(&a);
		SwapInt(pstr[0], pstr[1]);
		return a;
	}
}

#endif
